As programming approaches and foundations have evolved, application programming interfaces (APIs) and programming schemas have been developed to standardize and unify programming methodologies that were previously multi-variant and relatively incompatible. Modern programming therefore often involves employing APIs and schemas in conjunction with reusable libraries. Such Programming languages continue to evolve to facilitate specification by programmers as well as efficient execution. For example, a significant component in functionality of Web Services is programmatic interaction with web data.
In general, there are three major components that make up the world of web data—relational data (e.g., SQL), self-describing data (e.g., XML), and a runtime environment. A popular method of implementing a relational data model is by means of SQL (Structured Query Language). SQL is a language used to communicate with a relational database management system such as SQL Server, Oracle or Access—data in a relational database system is typically stored in tables. An accepted standard for self-describing data is XML (eXtensible Markup Language). XML is a World Wide Web Consortium (W3C) standard language that describes data via a schema or Document Type Definition (DTD). XML data is stored through the use of tags. A runtime environment is a general-purpose multilanguage execution engine (e.g., Common Language Runtime (CLR)) that allows authors to write programs that use both relational data and self-describing data.
XML provides syntax for describing heterogeneous graph(s) of data where typing rules (usually called “schema validation”) are optional and loosely bound to those type instances. Furthermore, the XML schemas associated with those documents can describe more complex structures with sequences, choices, unbounded type collections, and a combination of typed and untyped data. Such constructs are designed to allow a loosely coupled architecture that minimizes hard dependencies between different parties that make up a complex distributed system and have proven to be an effective way to make distributed systems scale up to a level of complexity required for today's interconnected business systems.
Accordingly, wildcard characters can be employed to increase flexibility in what is allowed to appear in a content model. These characters are supported in the XSD language in ways such as: element wildcard characters, represented by the <xsd:any> element; Attribute wildcard characters represented by the <xsd:anyAttribute> element. Moreover, both wildcard character elements, <xsd:any> and <xsd:anyAttribute>, support the use of a processContents attribute. Such enables specifying a value that indicates how XML applications handle the validation of document content associated with these wildcard character elements. For example, the strict value specifies that the contents are fully validated; the skip value specifies that the contents are not validated; the lax value specifies that only elements and attributes for which schema definitions are available are validated.
Furthermore, the XQuery language provides for static type analysis and static type checking. Typically, to perform static type analysis XQuery employs any available XML Schema information tied to the queried data, if available to improve the preciseness of the inferred type. XML Schemas can contain very strict type constraints, for which inferring a type is fairly straight forward, but it also provides so called “laxly” validated content models and attributes expressed by the content type xs:anyType, the xs:anyAttribute and xs:any wildcard sections with the processContent property set to Lax. Such process content lax requires content model/data to be strictly validated/correct whenever a schema component can be found. Alternatively, if no schema component is found, no requirement of validation exists and such data can be considered very loosely typed.